共计 1789 个字符,预计需要花费 5 分钟才能阅读完成。
传输单个字节:
void USART_Transmit(unsigned char data)
{
unsigned int i = 0;
// 等待发送缓冲区为空
while (!(UCSRA & (1 << UDRE)))
{wdt_reset();
if (++i > 20000)
break;
}
// 发送数据
UDR = data;
}
发送字符串:
void USART_TransmitString(const char *str)
{while (*str)
{USART_Transmit(*str++);
}
}
单 AT 指令
// 发送 UART 指令
void Send_AT_UART_Command(int num)
{switch (num)
{
case 0:
USART_TransmitString("AT+UART=0\r\n");
break;
case 1:
USART_TransmitString("AT+UART=1\r\n");
break;
case 2:
USART_TransmitString("AT+UART=2\r\n");
break;
case 3:
USART_TransmitString("AT+UART=3\r\n");
break;
case 4:
USART_TransmitString("AT+UART=4\r\n");
break;
case 5:
USART_TransmitString("AT+UART=5\r\n");
break;
case 6:
USART_TransmitString("AT+UART=6\r\n");
break;
default:
break;
}
}
多 AT 指令
// AT 初始化配置
void AT_Init(void)
{
// 10ms 进行一次
if (Get(timeBase, AT_TM_BS))
{Clear(timeBase, AT_TM_BS);
switch (AT_NUM)
{
case 0:
// 确保不发送数据
ATsendStart = 0;
// 等待缓冲区为空
if (getb(UCSRA, UDRE))
{
// 设置蓝牙名称
Send_AT_MAC_Command(0);
}
AT_NUM++;
break;
case 1:
// 确保不发送数据
ATsendStart = 0;
// 等待缓冲区为空
if (getb(UCSRA, UDRE))
{
// MAC 表增加 1 号机
AT_MAC_List(1);
}
AT_NUM++;
break;
case 2:
// 确保不发送数据
ATsendStart = 0;
// 等待缓冲区为空
if (getb(UCSRA, UDRE))
{
// MAC 表增加 E01
AT_MAC_List(2);
}
AT_NUM++;
break;
case 3:
// 确保不发送数据
ATsendStart = 0;
// 等待缓冲区为空
if (getb(UCSRA, UDRE))
{
// 自动重连 mac 表增加 3 号从机
AT_MAC_List(3);
AT_NUM++;
}
break;
case 4:
// 确保不发送数据
ATsendStart = 0;
if (getb(UCSRA, UDRE))
{
// 自动重连 mac 表增加 4 号从机
AT_MAC_List(4);
AT_NUM++;
}
break;
case 5:
// 确保不发送数据
ATsendStart = 0;
if (getb(UCSRA, UDRE))
{
// 开启自动重连
Send_AT_List_Command(1);
AT_NUM++;
}
break;
case 6:
// 确保不发送数据
ATsendStart = 0;
if (getb(UCSRA, UDRE))
{
// 设置功率
Send_AT_Power_Command(4);
AT_NUM++;
}
break;
case 7:
// 确保不发送数据
ATsendStart = 0;
if (getb(UCSRA, UDRE))
{
// 开启自动重连列表
// Send_AT_List_Command(1);
AT_NUM++;
}
break;
case 8:
// UDR = 0xaa;
AT_NUM++;
ATsendStart = 1;
ATReceiveStart = 1;
if (getb(UCSRA, UDRE))
{
// 重启 BLE
Send_AT_REBOOT_Command();}
break;
case 9:
AT_NUM = 9;
ATsendStart = 1;
ATReceiveStart = 1;
break;
default:
ATsendStart = 0;
break;
}
}
}
正文完